home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / masm.arc / STRUCT.MAC < prev   
Text File  |  1985-03-06  |  3KB  |  211 lines

  1. .xlist
  2. ;
  3. ;  COPYRIGHT @ 1982
  4. ;    Jim Holtman
  5. ;    35 Dogwood Trail
  6. ;    Randolph, NJ 07869
  7. ;    (201) 361-3395
  8. ;
  9. .$on=1
  10. .cnt=1
  11. .lvl=0
  12. .$top=1
  13. xopsyn    macro    op1,op2
  14. @&op1    equ    op2
  15. @&op2    equ    op1
  16.     endm
  17.  
  18.     xopsyn    jbe,ja
  19.     xopsyn    jae,jb
  20.     xopsyn    jc,jnc
  21.     xopsyn    je,jne
  22.     xopsyn    jz,jnz
  23.     xopsyn    jg,jle
  24.     xopsyn    jge,jl
  25.     xopsyn    jno,jo
  26.     xopsyn    jpo,jpe
  27.     xopsyn    jns,js
  28.     purge    xopsyn
  29. ; create label
  30. .$lbl    macro    id,num
  31.                     id&num:
  32.     endm
  33.  
  34. .popdo    macro
  35.     if    .$top lt 1
  36.       %out stack overflow
  37.     else
  38.       .$top = .$top-1
  39.       .$get %.$top,.dold
  40.     endif
  41.     endm
  42.  
  43. .$get    macro    entry,value
  44. value = .&entry
  45.     endm
  46.  
  47. .$put    macro    entry,value
  48. .&entry = value
  49.     endm
  50.  
  51. .pushdo macro    x
  52.     ifnb    <x>
  53.       x = .cnt
  54.       .cnt = .cnt+1
  55.     endif
  56.     .$put    %.$top,.dold
  57.     .$top = .$top+1
  58.     endm
  59.  
  60. .$br    macro    type,id,label,long
  61.     local    lab
  62.     ifnb    <long>
  63.                     j&type    lab
  64.                     jmp    id&label
  65.                     lab:
  66.     else
  67.                     @j&type  id&label
  68.     endif
  69.     endm
  70.  
  71.  
  72. .doo    macro    cond,long
  73.     .pushdo .dold
  74.     .lvl = .lvl+1
  75.     .$br    cond,d@,%.dold,long
  76.     endm
  77.  
  78. .endif    macro
  79.     .popdo
  80.     .$lbl    d@,%.dold
  81.     .lvl = .lvl-1
  82.     endm
  83.  
  84. .if    macro    arg1,cond,arg2,long
  85.     ifb    <arg2>
  86.       .doo    arg1,cond
  87.     else
  88.                     cmp    arg1,arg2
  89.       .doo    cond,long
  90.     endif
  91.     endm
  92.  
  93. .ifs    macro    p1,p2,long
  94.                     test    p1,p2
  95.     .if    nz,long
  96.     endm
  97.  
  98. .ifc    macro    p1,p2,long
  99.                     test    p1,p2
  100.     .if    z,long
  101.     endm
  102.  
  103. .else    macro    long
  104.     .doif = .cnt
  105.     .cnt = .cnt+1
  106.     ifnb    <long>
  107.       .$jmp d@,%.doif
  108.     else
  109.       .$jmp <short d@>,%.doif
  110.     endif
  111.     .endif
  112.     .lvl = .lvl+1
  113.     .dold = .doif
  114.     .pushdo
  115.     endm
  116.  
  117. .$jmp    macro    id,num
  118.                     jmp    id&num
  119.     endm
  120.  
  121. .dowhl    macro    p1,cond,p2,long
  122.     ifnb    <p2>
  123.       .$do    long
  124.       .if    <p1>,cond,<p2>,long
  125.     else
  126.       .$do    cond
  127.       .if    p1,cond
  128.     endif
  129.     endm
  130.  
  131. .enddo    macro
  132.     .popdo
  133.     .doif = .dold
  134.     .popdo
  135.     .xxtemp = .dold and 8000h
  136.     if .xxtemp eq 0
  137.       .$jmp <short d@>,%.dold
  138.     else
  139.       .dold = .dold and 7fffh
  140.       .$jmp d@,%.dold
  141.     endif
  142.     .lvl = .lvl-1
  143.     .$lbl d@,%.doif
  144.     endm
  145.  
  146. check$    macro
  147.     if .$top ne 1
  148.       %out stack not empty
  149.     endif
  150.     if .lvl ne 0
  151.       %out nesting level mismatch
  152.     endif
  153.     endm
  154.  
  155. .$do    macro    long
  156.     .pushdo .dold
  157.     ifnb    <long>
  158.       .xxtemp = .$top-1
  159.       .$get %.xxtemp,.dold
  160.       .$pΦ %.xxtemp,<.dold or 8000h>
  161.     endif
  162.     .xxtemp = .dold and 7fffh
  163.     .$lbl d@,%.xxtemp
  164.     endm
  165.  
  166. .repeat macro
  167.     .$do
  168.     .lvl = .lvl+1
  169.     endm
  170.  
  171. .until    macro    p1,cond,p2,long
  172.     ifidn    <p1>,<loop>
  173.       .popdo
  174.       .$loop loop&cond,d@,%.dold
  175.     else
  176.       ifnb <p2>
  177.                     cmp p1,p2
  178.         .popdo
  179.         .$br cond,d@,%.dold,long
  180.       else
  181.         .popdo
  182.         .$br p1,d@,%.dold,cond
  183.       endif
  184.     endif
  185.     .lvl = .lvl-1
  186.     endm
  187.  
  188. .$loop    macro    type,id,num
  189.                     type    id&num
  190.     endm
  191.  
  192. @pop    macro    parm
  193.     irp    @@pop,<parm>
  194.     ifnb    <@@pop>
  195.     pop    @@pop
  196.     endif
  197.     endm
  198.     endm
  199.  
  200. @save    macro    p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12
  201.     irp    @@save,<p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12>
  202.     ifnb    <@@save>
  203.     push    @@save
  204.     endif
  205.     endm
  206. @restore macro
  207.     @pop    <p12,p11,p10,p9,p8,p7,p6,p5,p4,p3,p2,p1>
  208.     endm
  209.     endm
  210. .list
  211.